home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-SPAR.{_A / SIGINFO.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  7KB  |  280 lines

  1. #ifndef _SPARC64_SIGINFO_H
  2. #define _SPARC64_SIGINFO_H
  3.  
  4. #include <linux/types.h>
  5.  
  6. typedef union sigval {
  7.     int sival_int;
  8.     void *sival_ptr;
  9. } sigval_t;
  10.  
  11. #ifdef __KERNEL__
  12.  
  13. typedef union sigval32 {
  14.     int sival_int;
  15.     u32 sival_ptr;
  16. } sigval_t32;
  17.  
  18. #endif /* __KERNEL__ */
  19.  
  20. #define SI_MAX_SIZE    128
  21. #define SI_PAD_SIZE    ((SI_MAX_SIZE/sizeof(int)) - 4)
  22. #define SI_PAD_SIZE32    ((SI_MAX_SIZE/sizeof(int)) - 3)
  23.  
  24. typedef struct siginfo {
  25.     int si_signo;
  26.     int si_errno;
  27.     int si_code;
  28.  
  29.     union {
  30.         int _pad[SI_PAD_SIZE];
  31.  
  32.         /* kill() */
  33.         struct {
  34.             pid_t _pid;        /* sender's pid */
  35.             uid_t _uid;        /* sender's uid */
  36.         } _kill;
  37.  
  38.         /* POSIX.1b timers */
  39.         struct {
  40.             unsigned int _timer1;
  41.             unsigned int _timer2;
  42.         } _timer;
  43.  
  44.         /* POSIX.1b signals */
  45.         struct {
  46.             pid_t _pid;        /* sender's pid */
  47.             uid_t _uid;        /* sender's uid */
  48.             sigval_t _sigval;
  49.         } _rt;
  50.  
  51.         /* SIGCHLD */
  52.         struct {
  53.             pid_t _pid;        /* which child */
  54.             uid_t _uid;        /* sender's uid */
  55.             int _status;        /* exit code */
  56.             clock_t _utime;
  57.             clock_t _stime;
  58.         } _sigchld;
  59.  
  60.         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
  61.         struct {
  62.             void *_addr; /* faulting insn/memory ref. */
  63.             int  _trapno; /* TRAP # which caused the signal */
  64.         } _sigfault;
  65.  
  66.         /* SIGPOLL */
  67.         struct {
  68.             int _band;    /* POLL_IN, POLL_OUT, POLL_MSG */
  69.             int _fd;
  70.         } _sigpoll;
  71.     } _sifields;
  72. } siginfo_t;
  73.  
  74. #ifdef __KERNEL__
  75.  
  76. typedef struct siginfo32 {
  77.     int si_signo;
  78.     int si_errno;
  79.     int si_code;
  80.  
  81.     union {
  82.         int _pad[SI_PAD_SIZE32];
  83.  
  84.         /* kill() */
  85.         struct {
  86.             __kernel_pid_t32 _pid;        /* sender's pid */
  87.             __kernel_uid_t32 _uid;        /* sender's uid */
  88.         } _kill;
  89.  
  90.         /* POSIX.1b timers */
  91.         struct {
  92.             unsigned int _timer1;
  93.             unsigned int _timer2;
  94.         } _timer;
  95.  
  96.         /* POSIX.1b signals */
  97.         struct {
  98.             __kernel_pid_t32 _pid;        /* sender's pid */
  99.             __kernel_uid_t32 _uid;        /* sender's uid */
  100.             sigval_t32 _sigval;
  101.         } _rt;
  102.  
  103.         /* SIGCHLD */
  104.         struct {
  105.             __kernel_pid_t32 _pid;        /* which child */
  106.             int _status;        /* exit code */
  107.             __kernel_clock_t32 _utime;
  108.             __kernel_clock_t32 _stime;
  109.         } _sigchld;
  110.  
  111.         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
  112.         struct {
  113.             u32 _addr; /* faulting insn/memory ref. */
  114.             int _trapno;
  115.         } _sigfault;
  116.  
  117.         /* SIGPOLL */
  118.         struct {
  119.             int _band;    /* POLL_IN, POLL_OUT, POLL_MSG */
  120.             int _fd;
  121.         } _sigpoll;
  122.     } _sifields;
  123. } siginfo_t32;
  124.  
  125. #endif /* __KERNEL__ */
  126.  
  127. /*
  128.  * How these fields are to be accessed.
  129.  */
  130. #define si_pid        _sifields._kill._pid
  131. #define si_uid        _sifields._kill._uid
  132. #define si_status    _sifields._sigchld._status
  133. #define si_utime    _sifields._sigchld._utime
  134. #define si_stime    _sifields._sigchld._stime
  135. #define si_value    _sifields._rt._sigval
  136. #define si_int        _sifields._rt._sigval.sival_int
  137. #define si_ptr        _sifields._rt._sigval.sival_ptr
  138. #define si_addr        _sifields._sigfault._addr
  139. #define si_trapno    _sifields._sigfault._trapno
  140. #define si_band        _sifields._sigpoll._band
  141. #define si_fd        _sifields._sigpoll._fd
  142.  
  143. /*
  144.  * si_code values
  145.  * Digital reserves positive values for kernel-generated signals.
  146.  */
  147. #define SI_USER        0    /* sent by kill, sigsend, raise */
  148. #define SI_KERNEL    0x80    /* sent by the kernel from somewhere */
  149. #define SI_QUEUE    -1    /* sent by sigqueue */
  150. #define SI_TIMER    -2    /* sent by timer expiration */
  151. #define SI_MESGQ    -3    /* sent by real time mesq state change */
  152. #define SI_ASYNCIO    -4    /* sent by AIO completion */
  153. #define SI_SIGIO    -5    /* sent by queued SIGIO */
  154.  
  155. #define SI_FROMUSER(siptr)    ((siptr)->si_code <= 0)
  156. #define SI_FROMKERNEL(siptr)    ((siptr)->si_code > 0)
  157.  
  158. /*
  159.  * SIGILL si_codes
  160.  */
  161. #define ILL_ILLOPC    1    /* illegal opcode */
  162. #define ILL_ILLOPN    2    /* illegal operand */
  163. #define ILL_ILLADR    3    /* illegal addressing mode */
  164. #define ILL_ILLTRP    4    /* illegal trap */
  165. #define ILL_PRVOPC    5    /* privileged opcode */
  166. #define ILL_PRVREG    6    /* privileged register */
  167. #define ILL_COPROC    7    /* coprocessor error */
  168. #define ILL_BADSTK    8    /* internal stack error */
  169. #define NSIGILL        8
  170.  
  171. /*
  172.  * SIGFPE si_codes
  173.  */
  174. #define FPE_INTDIV    1    /* integer divide by zero */
  175. #define FPE_INTOVF    2    /* integer overflow */
  176. #define FPE_FLTDIV    3    /* floating point divide by zero */
  177. #define FPE_FLTOVF    4    /* floating point overflow */
  178. #define FPE_FLTUND    5    /* floating point underflow */
  179. #define FPE_FLTRES    6    /* floating point inexact result */
  180. #define FPE_FLTINV    7    /* floating point invalid operation */
  181. #define FPE_FLTSUB    8    /* subscript out of range */
  182. #define NSIGFPE        8
  183.  
  184. /*
  185.  * SIGSEGV si_codes
  186.  */
  187. #define SEGV_MAPERR    1    /* address not mapped to object */
  188. #define SRGV_ACCERR    2    /* invalid permissions for mapped object */
  189. #define NSIGSEGV    2
  190.  
  191. /*
  192.  * SIGBUS si_codes
  193.  */
  194. #define BUS_ADRALN    1    /* invalid address alignment */
  195. #define BUS_ADRERR    2    /* non-existant physical address */
  196. #define BUS_OBJERR    3    /* object specific hardware error */
  197. #define NSIGBUS        3
  198.  
  199. /*
  200.  * SIGTRAP si_codes
  201.  */
  202. #define TRAP_BRKPT    1    /* process breakpoint */
  203. #define TRAP_TRACE    2    /* process trace trap */
  204. #define NSIGTRAP
  205.  
  206. /*
  207.  * SIGCHLD si_codes
  208.  */
  209. #define CLD_EXITED    1    /* child has exited */
  210. #define CLD_KILLED    2    /* child was killed */
  211. #define CLD_DUMPED    3    /* child terminated abnormally */
  212. #define CLD_TRAPPED    4    /* traced child has trapped */
  213. #define CLD_STOPPED    5    /* child has stopped */
  214. #define CLD_CONTINUED    6    /* stopped child has continued */
  215. #define NSIGCHLD
  216.  
  217. /*
  218.  * SIGPOLL si_codes
  219.  */
  220. #define POLL_IN        1    /* data input available */
  221. #define POLL_OUT    2    /* output buffers available */
  222. #define POLL_MSG    3    /* input message available */
  223. #define POLL_ERR    4    /* i/o error */
  224. #define POLL_PRI    5    /* high priority input available */
  225. #define POLL_HUP    6    /* device disconnected */
  226. #define NSIGPOLL    6
  227.  
  228. /*
  229.  * sigevent definitions
  230.  * 
  231.  * It seems likely that SIGEV_THREAD will have to be handled from 
  232.  * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
  233.  * thread manager then catches and does the appropriate nonsense.
  234.  * However, everything is written out here so as to not get lost.
  235.  */
  236. #define SIGEV_SIGNAL    0    /* notify via signal */
  237. #define SIGEV_NONE    1    /* other notification: meaningless */
  238. #define SIGEV_THREAD    2    /* deliver via thread creation */
  239.  
  240. #define SIGEV_MAX_SIZE    64
  241. #define SIGEV_PAD_SIZE    ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
  242. #define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
  243.  
  244. typedef struct sigevent {
  245.     sigval_t sigev_value;
  246.     int sigev_signo;
  247.     int sigev_notify;
  248.     union {
  249.         int _pad[SIGEV_PAD_SIZE];
  250.  
  251.         struct {
  252.             void (*_function)(sigval_t);
  253.             void *_attribute;    /* really pthread_attr_t */
  254.         } _sigev_thread;
  255.     } _sigev_un;
  256. } sigevent_t;
  257.  
  258. #ifdef __KERNEL__
  259.  
  260. typedef struct sigevent32 {
  261.     sigval_t sigev_value;
  262.     int sigev_signo;
  263.     int sigev_notify;
  264.     union {
  265.         int _pad[SIGEV_PAD_SIZE32];
  266.  
  267.         struct {
  268.             u32 _function;
  269.             u32 _attribute;    /* really pthread_attr_t */
  270.         } _sigev_thread;
  271.     } _sigev_un;
  272. } sigevent_t32;
  273.  
  274. #endif /* __KERNEL__ */
  275.  
  276. #define sigev_notify_function    _sigev_un._sigev_thread._function
  277. #define sigev_notify_attributes    _sigev_un._sigev_thread._attribute
  278.  
  279. #endif
  280.